package com.hd123.rumba.gwt.widget2.client.dialog;

import java.util.ArrayList;
import java.util.Iterator;

import com.hd123.rumba.gwt.widget2.client.button.RButton;
import com.hd123.rumba.gwt.widget2.client.dialog.RDialog.ButtonConfig;

/**
 * RDialogButtonClickListener集合
 * 
 * @author LiQi
 * 
 */
public class RDialogButtonClickListenerCollection extends ArrayList {

  private static final long serialVersionUID = 1L;

  /**
   * 触发所有监听器的click事件
   * 
   * @param dialog
   *          按钮所在对话框
   * @param buttonConfig
   *          按钮定义
   * @param button
   *          按钮
   * @return 是否关闭对话框。若返回true，则对话框会被关闭，否则不会被关闭。如果存在多个listener，
   *         则只有当所有listener 都返回true时对话框才会被关闭，也就是说，
   *         任何一个listener都可以通过返回false来阻止对话框关闭。
   */
  public boolean fireClick(RDialog dialog, ButtonConfig buttonConfig, RButton button) {
    boolean result = true;
    for (Iterator it = iterator(); it.hasNext();) {
      RDialogButtonClickListener listener = (RDialogButtonClickListener) it.next();
      result &= listener.onClick(dialog, buttonConfig, button);
    }
    return result;
  }
}
